package com.wangsd.web.weixin.controller;


import com.alibaba.fastjson.JSON;
import com.alibaba.fastjson.JSONArray;
import com.wangsd.common.entity.Result;
import com.wangsd.web.weixin.entity.WxMessage;
import com.wangsd.web.weixin.service.TemplateService;
import lombok.extern.slf4j.Slf4j;
import me.chanjar.weixin.common.error.WxErrorException;
import org.apache.commons.lang3.StringUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RequestMapping;
import org.springframework.web.bind.annotation.RestController;

import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.util.List;

/**
 * <p>
 * 微信模板消息（已授权第三方平台）
 * </p>
 *
 * @author generator
 * @since 2019-10-22
 */
@Slf4j
@RestController
@RequestMapping("/api/wxTemplate")
public class WxTemplateController {

    @Autowired
    TemplateService templateService;

    /**
     * 发送微信模板消息
     *
     * @param wxMessage  发送的消息实体类
     * @param openId     接收openId
     * @param templateId 微信公共模板Id
     * @param appId      公众号ID
     */
    @RequestMapping("/sendTemplate")
    public Object sendTemplate(String wxMessage, String openId, String templateId, String appId) {
        if (StringUtils.isBlank(wxMessage)) {
            return Result.fail("发送消息内容不能为空！");
        }
        if (StringUtils.isBlank(openId)) {
            return Result.fail("openId不能为空！");
        }
        if (StringUtils.isBlank(templateId)) {
            return Result.fail("templateId不能为空！");
        }
        if (StringUtils.isBlank(appId)) {
            return Result.fail("appId不能为空！");
        }
        try {
            JSON json = JSON.parseObject(wxMessage);
            WxMessage message = JSON.toJavaObject(json, WxMessage.class);
            templateService.sendTemplate(message, openId, templateId, appId);
            return Result.success();
        } catch (WxErrorException e) {
            return Result.fail(e.getMessage());
        }
    }

    /**
     * 发送微信模板消息
     *
     * @param wxMessage  发送的消息实体类
     * @param openIds    接受openIds
     * @param templateId 微信公共模板Id
     * @param appId      公众号ID
     */
    @RequestMapping("/sendTemplateList")
    public Object sendTemplateList(String wxMessage, String openIds, String templateId, String appId) {
        if (StringUtils.isBlank(wxMessage)) {
            return Result.fail("发送消息内容不能为空！");
        }
        if (StringUtils.isBlank(openIds)) {
            return Result.fail("openIds不能为空！");
        }
        if (StringUtils.isBlank(templateId)) {
            return Result.fail("templateId不能为空！");
        }
        if (StringUtils.isBlank(appId)) {
            return Result.fail("appId不能为空！");
        }

        try {
            JSON msg = JSON.parseObject(wxMessage);
            WxMessage message = JSON.toJavaObject(msg, WxMessage.class);
            List<String> ids = JSONArray.parseArray(openIds, String.class);
            templateService.sendTemplate(message, ids, templateId, appId);
            return Result.success();
        } catch (WxErrorException e) {
            return Result.fail(e.getMessage());
        }
    }
}

